package programme;
/**
 * 
 * Classe de fonction objectif d'un programme linéeaire.
 * 
 *
 */
public class FonctObjectif {
	
	/** Booléen indiquant si la fonction objectif est à minimiser (vrai) ou maximiser (faux) */
	private boolean min;
	
	private Expression fonction;

	public FonctObjectif(boolean min, Expression fonct) {
		this.min = min;
		fonction = fonct;
	}
	
	/**
	 * Méthode d'évaluation d'un jeu de valeurs sur une contrainte
	 * 
	 * @param s	Le jeu de valeur
	 * @return	La valeur de l'expression de la contrainte
	 */
	public double eval(Solution s){
		
		double resultat = 0;
		double element;
		
		for (SousExpression se : fonction.getSsExpressions()){
			
			element = se.getCoef();
			
			for (Variable v : se.getVar()){
				
				element *= s.getValeurs().get(v);
				
			}
			
			resultat += element;
			
		}
		
		return resultat;
	}	

	public boolean isMin() {
		return min;
	}

	public void setMin(boolean min) {
		this.min = min;
	}

	public Expression getFonction() {
		return fonction;
	}

	public void setFonction(Expression fonction) {
		this.fonction = fonction;
	}
	
}
